// 学习小组相关类型定义
import type { BaseEntity } from './index'

// 学习小组接口
export interface StudyGroup extends BaseEntity {
  id: number
  name: string
  description: string
  creatorId: number
  creatorName: string
  creatorAvatar?: string
  categoryId?: number
  categoryName?: string
  maxMembers: number
  currentMembers: number
  memberCount?: number // 兼容性字段
  isPublic: boolean
  isActive: boolean
  isJoined?: boolean
  tags?: string[] // 添加标签字段
  data?: any // 添加数据字段
  coverImage?: string // 封面图片
  type?: string // 小组类型
  status?: string // 小组状态
  isVerified?: boolean // 是否认证
  activityCount?: number // 活动数量
  resourceCount?: number // 资源数量
  members?: Partial<GroupMember>[] // 成员列表
  latestActivity?: Partial<GroupActivity> // 最新活动
  createdAt: string
  updatedAt: string
}

// 学习小组别名（兼容性）
export type LearningGroup = StudyGroup

// 小组活动接口
export interface GroupActivity {
  id: number
  groupId: number
  title: string
  description: string
  activityType: string
  startTime: string
  endTime?: string
  createdBy: number
  createdAt: string
}

// 小组成员接口
export interface GroupMember extends BaseEntity {
  id: number
  groupId: number
  userId: number
  username: string
  avatar?: string
  role: 'ADMIN' | 'MODERATOR' | 'MEMBER' | 'owner' | 'manager' | 'member' // 兼容性
  joinedAt: string
  status: 'ACTIVE' | 'INACTIVE' | 'BANNED'
  user?: { // 用户信息
    id: number
    username: string
    avatar?: string
  }
  createdAt: string
  updatedAt: string
}

// 创建学习小组数据接口
export interface CreateGroupData {
  name: string
  description: string
  categoryId?: number
  maxMembers?: number
  isPublic?: boolean
}

// 更新学习小组数据接口
export interface UpdateGroupData {
  name?: string
  description?: string
  categoryId?: number
  maxMembers?: number
  isPublic?: boolean
}

// 学习小组分页接口
export interface GroupPagination {
  content: StudyGroup[]
  totalElements: number
  totalPages: number
  currentPage: number
  pageSize: number
}

// 学习小组搜索参数接口
export interface GroupSearchParams {
  keyword?: string
  categoryId?: number
  sortBy?: 'popular' | 'latest' | 'name'
  page?: number
  pageSize?: number
}